package com.rv.nats.annotation;

import java.lang.annotation.*;

/**
 * 主题路径
 * 例:
 * {@code
 *     @Publish(topic = "$report.$data.wjzq.v1.alarm.device.{deviceId}")
 *     void publishDeviceAlarm(@PathSubject("deviceId") Long deviceId , @Payload DeviceAlarm deviceAlarm);
 *  }
 *  {deviceId}与参数deviceId是动态关联的，当参数使用了{@link Publish}则会认为{@link Publish#topic()}中的主题是有要替换的数据，
 *  当deviceId为1时，那么发送的数据则是 $report.$data.wjzq.v1.alarm.device.1,
 *  注意: 一般情况下参数名deviceId要与路径主题{deviceId}名字一致,那么则参数解析器会将其替换，但还是建议在{@link PathSubject#value()}中明确路径主题变量
 * @author suen
 * @time 2023/7/28
 * @description
 **/

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Documented
public @interface PathSubject {
    String value() default "";
}
